package plgbasev0

//type PlugChangedLogRec struct {
//	t            time.Time
//	id, plugtype string
//	conf         *wrapper.SuperValue
//	err          error
//}
//
//func NewPlugChangedLogRec() *PlugChangedLogRec {
//	rval := &PlugChangedLogRec{}
//	return rval
//}

///**
//  {
//    "id":"id",
//    "conf":{"type":"xxxx"...}
//  }
//
//[
//   {"id":"id", "conf":{}}
//]
//*/
//func OnPlugRecvCmd(req *wrapper.SuperValue) (rval interface{}, errcode int, err error) {
//	if req.IsArray() {
//		req.Range(func(key string, val *wrapper.SuperValue) bool {
//			_, errcode, err = OnPlugJSONCmd(val)
//			if err != nil {
//				utils.Log.DebugTypef("plugs", "创建插件异常:%s, 配置:%s", err.Error(), val.AsJSONString(false))
//				return false
//			}
//
//			return true
//		})
//	} else {
//		return OnPlugJSONCmd(req)
//	}
//	return
//}

//func OnPlugJSONCmd(val *wrapper.SuperValue) (rval interface{}, errcode int, err error) {
//	id := val.StringByName("id", "")
//	if len(id) == 0 {
//		return nil, 0, nil
//	}
//	plugtype := val.StringByName("type", "")
//	if len(plugtype) == 0 {
//		plugtype = val.StringByPath("conf.type", "")
//	}
//	return OnPlugConfChanged(id, plugtype, val.ValueByName("conf"))
//}
//
//var (
//	pluggroup      = utils.CheckGetObjGroup("plugs")
//	plugsub        = utils.NewSubscribeCenter().ConfigDispMode(1)
//	plug_log_queue = utils.NewSyncCycleList()
//)
//
//
//
//func DeferPlugs() {
//	pluggroup.Range(func(key, value interface{}) bool {
//		pojo := value.(*utils.ObjPojo)
//		pojo.ReleaseObj(nil)
//		pluggroup.Remove(key)
//		return true
//	})
//}
//
//func OnPlugConfChanged(id string, objtype string, conf *wrapper.SuperValue) (rval interface{}, errcode int, err error) {
//	logPlug := NewPlugChangedLogRec()
//	logPlug.id = id
//	logPlug.t = time.Now()
//	logPlug.plugtype = objtype
//	logPlug.conf = conf
//	defer func() {
//		plug_log_queue.Push(logPlug)
//	}()
//
//	pojo := utils.CheckGetObjPojoByGroup(pluggroup, id)
//	err = pojo.ReloadConfEx(objtype, conf, func(obj interface{}) { // 释放了之前的插件
//		plugsub.DispatchData(PLUG_DISP_RELEASE, obj, id, nil)
//	}, func(obj interface{}) { // 创建了插件
//		TrySetPlugID(obj, id)
//	})
//	if utils.ErrIsUnChangedErr(err) { // 未改变
//		err = nil
//		return
//	}
//	logPlug.err = err
//	if err != nil && !utils.ErrIsUnChangedErr(err) {
//		errcode = ERR_INNER
//		return
//	} else {
//		plugsub.DispatchData(PLUG_DISP_CHANGED, pojo.GetObject(), id, nil)
//	}
//	return
//}
//
//var (
//	CmdAddr   string
//	json_cmd  string
//	json_file string
//	conf_file string
//	//BUILD_TIME string = "2020-12-23_11:32:01"
//	//EXP_TIME   time.Time
//)
//
//func CmdPrepare4Plugs() {
//	flag.StringVar(&CmdAddr, "cmd-addr", ":6061", "[IP:PORT]")
//	flag.StringVar(&json_cmd, "json-cmd", "", `JSON URLEncode {"id":"", "conf":{"type":""}`)
//	flag.StringVar(&json_file, "json-file", "", "")
//	flag.StringVar(&conf_file, "config-file", "", "")
//}
//
//func DoReloadPlugFromJSONFile() error {
//	if len(conf_file) == 0{
//		if len(os.Args) == 2{
//			str := os.Args[1];
//			if utils.FileIsExists(str){
//				conf_file = str;
//			}
//		}
//	}
//	if len(conf_file) > 0 {
//		json, err := wrapper.NewSVFromFile(conf_file)
//		if err != nil {
//			golog.Warnf( "config file(%s) parse err:%s", json_file, err.Error())
//			return err
//		}
//
//		if json.IsArray() {
//			_, _, err := OnPlugRecvCmd(json)
//			return err
//		} else {
//			_, _, err := OnPlugRecvCmd(json.ValueByName("list"))
//			return err
//		}
//	} else {
//		return fmt.Errorf("没有指定配置文件")
//	}
//}
//
//func DoReloadJSON(json *wrapper.SuperValue) error {
//	if len(CmdAddr) == 0 {
//		return fmt.Errorf("cmd-addr is empty!")
//	}
//	http_addr := CmdAddr
//	if http_addr[0] == ':' {
//		http_addr = "http://127.0.0.1" + http_addr
//	} else {
//		if strings.Index(http_addr, "0.0.0.0") != -1 {
//			http_addr = strings.ReplaceAll(http_addr, "0.0.0.0", "127.0.0.1")
//		}
//		if strings.Index(http_addr, "http") != 0 {
//			http_addr = "http://" + http_addr
//		}
//	}
//	if http_addr[len(http_addr)-1] == '/' {
//		http_addr += "sys/cmd"
//	} else {
//		http_addr += "/sys/cmd"
//	}
//
//	golog.Warnf( "cmd-addr:%s, raw:%s", http_addr, CmdAddr)
//
//	{
//		resp, err := PrjHttpClt.PostJsonEx(http_addr, json.AsJSONString(true))
//		if err != nil {
//			return err
//		} else {
//			msg := resp.StringByName("msg", "")
//			if len(msg) > 0 {
//				return fmt.Errorf("jsoncmd http resp msg :%s, errcode:%d", msg, resp.IntByName("errcode", 0))
//			}
//		}
//	}
//	return nil
//}
//
//func DoJSONCmd() bool {
//	if len(json_cmd) > 0 {
//		str, err := url.PathUnescape(json_cmd)
//		if err != nil {
//			golog.Warnf( "jsoncmd PathUnescape err:%s", err.Error())
//			return true
//		}
//
//		json, err := wrapper.NewSVFromBuf([]byte(str))
//		if err != nil {
//			golog.Warnf( "jsoncmd json parse err:%s", err.Error())
//			return true
//		}
//
//		{
//			err := DoReloadJSON(json)
//			if err != nil {
//				golog.Warnf( "jsoncmd err %s", err.Error())
//			}
//		}
//		return true
//	}
//	return false
//}
//
//func DoJsonFile() bool {
//	if len(json_file) > 0 {
//		json, err := wrapper.NewSVFromFile(json_file)
//		if err != nil {
//			golog.Warnf( "JSONFile(%s) parse err:%s", json_file, err.Error())
//			return true
//		}
//
//		{
//			err := DoReloadJSON(json)
//			if err != nil {
//				golog.Warnf( "JSONFile reload err %s", err.Error())
//			}
//		}
//		return true
//	}
//	return false
//}
